#!/bin/sh
# script to check accessibility to the reclock file on a node

[ -n "$CTDB_BASE" ] || \
    CTDB_BASE=$(d=$(dirname "$0") ; cd -P "$d" ; dirname "$PWD")

. "${CTDB_BASE}/functions"

loadconfig

# If CTDB_RECOVERY_LOCK specifies a helper then exit because this
# script can't do anything useful.
case "$CTDB_RECOVERY_LOCK" in
!*) exit 0 ;;
esac

case "$1" in
init)
	ctdb_counter_init

	if [ -n "$CTDB_RECOVERY_LOCK" ] ; then
	    d=$(dirname "$CTDB_RECOVERY_LOCK")
	    mkdir -vp "$d"
	fi
	;;

monitor)
	# Early exit if not using a reclock file
	[ -n "$CTDB_RECOVERY_LOCK" ] || exit 0

	# Try to stat the reclock file as a background process so that
	# we don't block in case the cluster filesystem is unavailable
	(
	    if stat "$CTDB_RECOVERY_LOCK" ; then
		# We could stat the file, reset the counter
		ctdb_counter_init
	    fi
	) >/dev/null 2>&1 &

	ctdb_counter_incr
	num_fails=$(ctdb_counter_get)
	if [ "$num_fails" -ge 200 ] ; then
	    echo "Reclock file \"$CTDB_RECOVERY_LOCK\" can not be accessed. Shutting down."
	    df
	    sleep 1
	    $CTDB shutdown
	    exit 1
	elif [ "$num_fails" -ge 4 ] ; then
		die "ERROR: ${num_fails} consecutive failures checking reclock"
	fi
	;;
esac

exit 0
